
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at
 
        http://www.apache.org/licenses/LICENSE- 2.0
 
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->



<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
  <HEAD>
    <TITLE>Apache FtpServer - Embedding FtpServer in 5 minutes</TITLE>
    <META http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <LINK type="text/css" rel="stylesheet" href="http://mina.apache.org/index.data/style.css">
    <SCRIPT type="text/javascript" language="javascript">
      function init() {
        /* Search form initialization */
        var form = document.forms['googleSearch'];
        if (form != null) {
          form.elements['domains'].value = location.hostname;
          form.elements['sitesearch'].value = location.hostname;
        }

      }
    </SCRIPT>
  </HEAD>
  <BODY onload="init()">
    <DIV id="PageContent" style="padding-bottom: 0px;">
      <DIV class="pageheader" style="padding: 6px 0px 0px 0px;">
        <DIV id="apacheLogo" style="width: 100%; text-align: right; position: absolute; top: 33px;">
          <A href="http://www.apache.org/"><IMG src="http://www.apache.org/images/asf-logo.gif" border="0" alt="The Apache Software Foundation" title="The Apache Software Foundation" hspace="12"></A>
        </DIV>
        <DIV id="minaLogo" style="position: absolute; top: 24px; left: 16px;">
          <A href="http://mina.apache.org/ftpserver"><IMG src="http://mina.apache.org/ftpserver/index.data/logo-300x95.png" border="0" alt="Apache FtpServer" title="Apache FtpServer"></A>
        </DIV>
        <DIV class="greynavbar" style="margin: 156px 0px 0px 0px;">
          <TABLE border="0" cellpadding="2" cellspacing="0" width="100%" style="position: relative; z-index: 10;">
            <TR>
              <TD align="left" valign="middle" align="left" style="padding-left: 17px;" width="100%" nowrap="">
                &nbsp;<A href="index.html" title="Apache MINA FtpServer">Apache MINA FtpServer</A>&nbsp;&gt;&nbsp;<A href="index.html" title="Index">Index</A>&nbsp;&gt;&nbsp;<A href="" title="Embedding FtpServer in 5 minutes">Embedding FtpServer in 5 minutes</A>
              </TD>
              <TD align="right" valign="middle" nowrap="">
                <FORM name="googleSearch" action="http://www.google.com/search" method="get" style="margin: 0px; padding: 0px;">
                  <INPUT type="hidden" name="ie" value="UTF-8">
                  <INPUT type="hidden" name="oe" value="UTF-8">
                  <INPUT type="hidden" name="domains" value="">
                  <INPUT type="hidden" name="sitesearch" value="">
                  <INPUT type="text" name="q" maxlength="255" value="">        
                  <INPUT type="submit" name="btnG" value="Google Search">
                </FORM>
              </TD>
              <TD align="right" valign="middle" style="padding-right: 8px;" nowrap="">
                <FORM name="listSearch" action="http://mina.markmail.org/search/" method="get" style="margin: 0px; padding: 0px;">
                  <INPUT type="text" name="q" maxlength="255" value="">        
                  <INPUT type="submit" value="Mailing List Search">
                </FORM>
              </TD>
            </TR> 
          </TABLE>
        </DIV>
      </DIV>
      <DIV id="pageBody" style="clear: both;">
        <TABLE border="0" cellpadding="0" cellspacing="0" width="100%">
          <TR>
            <TD width="192" valign="top" nowrap="">
              <DIV style="padding: 0px 8px 16px 20px;">
                
                                                                                                                                                                                                                                          <H3><A name="Navigation-Overview"></A>Overview</H3>

<UL>
	<LI><A href="index.html" title="Index">Home</A></LI>
	<LI><A href="features.html" title="Features">Features</A></LI>
	<LI><A href="documentation.html" title="Documentation">Documentation</A></LI>
	<LI><A href="downloads.html" title="Downloads">Downloads</A></LI>
	<LI><A href="source.html" title="Source">Source</A></LI>
	<LI><A href="faq.html" title="FAQ">FAQ</A></LI>
	<LI><A href="related-projects.html" title="Related Projects">Related Projects</A></LI>
</UL>


<H3><A name="Navigation-Community"></A>Community</H3>

<UL>
	<LI><A href="mailing-lists.html" title="Mailing Lists">Mailing Lists</A></LI>
	<LI><A href="getting-involved.html" title="Getting Involved">Getting Involved</A></LI>
	<LI><A href="reporting-a-bug.html" title="Reporting a Bug">Reporting a Bug</A></LI>
	<LI><A href="contributors.html" title="Contributors">Contributors</A></LI>
	<LI><A href="testimonials.html" title="Testimonials">Testimonials</A></LI>
</UL>


<H3><A name="Navigation-Sponsorship"></A>Sponsorship</H3>

<UL>
	<LI><A href="http://www.apache.org/foundation/thanks.html" rel="nofollow">Thanks</A></LI>
	<LI><A href="http://www.apache.org/foundation/sponsorship.html" rel="nofollow">Sponsorship</A></LI>
	<LI><A href="http://www.apache.org/foundation/contributing.html" rel="nofollow">Contributing</A></LI>
</UL>
                                                                                                                    </DIV>
             <DIV align="center"><IFRAME src="http://www.apache.org/ads/buttonbar.html" style="border-width:0" frameborder="0" scrolling="no" width="135" height="265"></IFRAME></DIV>
            </TD>
            <TD width="100%" valign="top">
              <DIV class="pagecontent">
                <H1 style="margin-top: 0px;">
                  Embedding FtpServer in 5 minutes
                </H1>
                <DIV class="wiki-content">
                  <P>FtpServer is designed to be easily embedded into your application. Getting a basic server up and running is as simple as</P>

<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
FtpServerFactory serverFactory = <SPAN class="code-keyword">new</SPAN> FtpServerFactory();
FtpServer server = serverFactory.createServer();

<SPAN class="code-comment">// start the server
</SPAN>server.start();
</PRE>
</DIV></DIV>

<P>To get this running, you need the following JAR files in your classpath:</P>
<UL>
	<LI>mina-core, 2.0-M3 or later</LI>
	<LI>slf4j-api</LI>
	<LI>A SLF4J implementation of your choice, for example slf4j-simple-1.5.3.jar</LI>
	<LI>ftplet-api</LI>
	<LI>ftpserver-core</LI>
</UL>


<P>Now, you will probably like to configure the server for your specific needs. For example, you might want to run on a non-privileged port to get around running as a root on Linux/Unix. To do that you need to configure a listener. Listeners are the part of FtpServer where network management is done. By default, a listener named &quot;default&quot; is created but you can add as many listeners as you like, for example to provide one for use outside of your firewall and one on the inside. </P>

<P>Now, let's configure the port on which the default listener waits for connections.</P>

<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
FtpServerFactory serverFactory = <SPAN class="code-keyword">new</SPAN> FtpServerFactory();
        
ListenerFactory factory = <SPAN class="code-keyword">new</SPAN> ListenerFactory();
        
<SPAN class="code-comment">// set the port of the listener
</SPAN>factory.setPort(2221);

<SPAN class="code-comment">// replace the <SPAN class="code-keyword">default</SPAN> listener
</SPAN>serverFactory.addListener(<SPAN class="code-quote">&quot;<SPAN class="code-keyword">default</SPAN>&quot;</SPAN>, factory.createListener());
                
<SPAN class="code-comment">// start the server
</SPAN>FtpServer server = serverFactory.createServer(); 
        
server.start();
</PRE>
</DIV></DIV>

<P>Now, let's make it possible for a client to use FTPS (FTP over SSL) for the default listener.</P>

<DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent">
<PRE class="code-java">
FtpServerFactory serverFactory = <SPAN class="code-keyword">new</SPAN> FtpServerFactory();
        
ListenerFactory factory = <SPAN class="code-keyword">new</SPAN> ListenerFactory();
        
<SPAN class="code-comment">// set the port of the listener
</SPAN>factory.setPort(2221);

<SPAN class="code-comment">// define SSL configuration
</SPAN>SslConfigurationFactory ssl = <SPAN class="code-keyword">new</SPAN> SslConfigurationFactory();
ssl.setKeystoreFile(<SPAN class="code-keyword">new</SPAN> File(<SPAN class="code-quote">&quot;src/test/resources/ftpserver.jks&quot;</SPAN>));
ssl.setKeystorePassword(<SPAN class="code-quote">&quot;password&quot;</SPAN>);

<SPAN class="code-comment">// set the SSL configuration <SPAN class="code-keyword">for</SPAN> the listener
</SPAN>factory.setSslConfiguration(ssl.createSslConfiguration());
factory.setImplicitSsl(<SPAN class="code-keyword">true</SPAN>);

<SPAN class="code-comment">// replace the <SPAN class="code-keyword">default</SPAN> listener
</SPAN>serverFactory.addListener(<SPAN class="code-quote">&quot;<SPAN class="code-keyword">default</SPAN>&quot;</SPAN>, factory.createListener());
        
PropertiesUserManagerFactory userManagerFactory = <SPAN class="code-keyword">new</SPAN> PropertiesUserManagerFactory();
userManagerFactory.setFile(<SPAN class="code-keyword">new</SPAN> File(<SPAN class="code-quote">&quot;myusers.properties&quot;</SPAN>));
        
serverFactory.setUserManager(userManagerFactory.createUserManager());
        
<SPAN class="code-comment">// start the server
</SPAN>FtpServer server = serverFactory.createServer(); 
        
server.start();
</PRE>
</DIV></DIV>

<P>There you have it, that's the basics that you usually need. For more advanced features, have a look at our configuration documentation.</P>
                </DIV>
  
              </DIV>
            </TD>
          </TR>
        </TABLE>
        <DIV class="footer" style="text-align: center">
          Copyright &copy; 2004-2008, <A href="http://www.apache.org/">The Apache Software Foundation</A>
        </DIV>
      </DIV>
    </DIV>
  </BODY>
</HTML>
